Data storage systems are arrangements of hardware and software that include storage processors coupled to arrays of non-volatile storage devices. In typical operation, storage processors service storage requests that arrive from client machines. The storage requests specify files or other data elements to be written, read, created, or deleted, for example. The storage processors run software that manages incoming storage requests and performs various data processing tasks to organize and secure the data stored on the non-volatile storage devices.
Data storage systems often implement snapshot technology to protect the data they store. For example, a data storage system may serve a data object to various client machines. The client machines access the data object over a network and can make changes to its contents over time. To protect the data object and its state at various points in time, the data storage system may implement a snapshot policy and take snapshots, or “snaps,” of the data object at regular intervals or in response to user commands or particular events. Each snapshot provides a point-in-time version of the data object, which users of client machines can access to restore from a previous version of the data object, such as to resume use of an object from a previous, known-good state. Users may also restore from snaps to examine previous states of data objects, such as for forensic purposes.
To conserve physical storage space, data storage systems often employ block sharing relationships among data objects and their snaps. As is known, a “block” is an allocatable unit of storage, which may, for example, be 8 KB in size, although blocks can be of any size. Block sharing saves storage space by storing common data used by different files on the same blocks, rather than requiring each file to have its own blocks even when the data on the blocks are the same. Data storage systems can take snaps of many different types of data objects, including file systems, LUNs (Logical Unit Numbers), vVOLs (virtual volumes), VMDKs (virtual machine disks), VHD's (Virtual Hard Disks), and other types of objects.